home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / boosters.arc / SETATT.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  2KB  |  93 lines

  1. ;**************************************************
  2. ;
  3. ;       Procedure SETATT( X1,Y1,X2,Y2 : Integer;
  4. ;                           Attribute : Byte );
  5. ;                 offset  12,10,08,06,
  6. ;                                  04
  7. ;       Sets video attribute at X1,Y1 (upper left)
  8. ;                               X2,Y2 (lower right)
  9. ;
  10. ;**************************************************
  11. SETATT  proc    near
  12.         push    bp
  13.     mov    bp,sp
  14.     push    ds
  15. ;
  16. ;
  17. ;*** Compute number of lines to move
  18. ;
  19.     mov    ax,[bp+10]    ; value of Y1 into AX
  20.     mov    dx,[bp+06]    ; value of Y2 into CX
  21.         sub     dx,ax           ; DX = Y2 - Y1
  22.     inc    dx        ; DX = Number of lines
  23.     push    dx
  24. ;
  25. ;
  26. ;*** Compute length of each move
  27. ;
  28.     mov    ax,[bp+12]    ;  X1
  29.     mov    cx,[bp+08]    ;  X2
  30.     sub    cx,ax        ;  CX = X2 - X1
  31.     inc    cx        ;  CX = num WORDS/line
  32.     push    cx
  33. ;
  34. ;*** Determine Video Address
  35. ;
  36.     mov    bx,449h
  37.     xor    ax,ax
  38.     mov    ds,ax
  39.     mov    al, [bx]
  40.     cmp    al,7
  41.     jne    graphx
  42.     mov    dx,0B000h
  43.     jmp    m001
  44. graphx:
  45.     mov    dx,03DAh    ; for IBM CGA,
  46. VR:    in    al,dx        ; we must do this
  47.     and    al,1000b    ; so we won't see
  48.     jz    vr        ; snow . . . and
  49.     mov    dx,0B800h    ; so long, speed
  50. m001:    mov    es,dx
  51. ;
  52. ;*** Compute upper left offset of block
  53. ;
  54.     mov    di,[bp+10]    ;  Y1 into BX
  55.         dec     di              ;  (Y1-1)
  56.     mov    dx,di        ;  Save in DX
  57.     mov    cl,7
  58.     shl    dx,cl        ;  (Y1-1) * 128
  59.     mov    cl,5
  60.     shl    di,cl        ;  (Y1-1) *  32
  61.     add    di,dx        ;  (Y1-1) * 160
  62.     mov    ax,[bp+12]    ;  X1 into AX
  63.     dec    ax        ;  (X1-1)
  64.     shl    ax,1        ;  2 * (X1-1)
  65.     add    di,ax        ;  offset
  66.     inc    di        ; odd location
  67. ;
  68.     pop    cx        ; Num words/line
  69.     pop    dx        ; Num lines to blank
  70. ;
  71. ;*** Set attribute byte for given block
  72. ;
  73.     mov    ax,[bp+04]    ; attribute
  74.     cld
  75. AGAIN:    push    cx
  76. DO:    stosb
  77.     inc    di
  78.     loop    do
  79. ;
  80.     pop    cx
  81.     dec    dx
  82.     jz    DONE2
  83.     add    di,160
  84.     sub    di,cx
  85.     sub    di,cx
  86.     jmp    AGAIN
  87. ;
  88. DONE2:  pop     ds
  89.         mov     sp,bp
  90.         pop     bp
  91.     ret    10
  92. SETATT  endp
  93.